##个人主页 https://gitee.com/wubie
from tornado import web,ioloop,httpserver
import gc
import time
import socket


SIGN_FILE_HANDLER = open('sign.csv', 'a')
SIGN_FILE_HANDLER.write('姓名')
SIGN_FILE_HANDLER.write('部门')
SIGN_FILE_HANDLER.write('编号\n')
SIGN_FILE_HANDLER.close()
port = input("inport post: ")  #自定义端口,手动输入
int(port)
print("port is {a} are you sure?".format(a = port))
#文件句柄
SIGN_FILE_HANDLER = open('sign.csv','a') #以追加的方法打开sign.csv
#表头
#ybd = time.localtime("%U")
SIGN_FILE_HANDLER.write('签到记录\n,%s,%s,%s,%s\n' %("姓名",'部门','工号','时间'))
errornum = 0  #异常判断参数，0为正常，大于3的时候表示错误


#逻辑处理模块

class SignpageHandler(web.RequestHandler):
    def get(self):
        try:
            self.render('sign.html')
            gc.collect()
        except:
            print("Error!\n       返回签到页面时出现异常")

    def post(self, *args, **kwargs):  #接受来自前端的信息
        try:
            user = self.get_argument('user')
            depar = self.get_argument('depar')
            num = self.get_argument('num')

            #写入到sign.csv文件
            nowtime = time.localtime()
            print(user,depar,num,"time:%s" %(nowtime))  #在后端打印最新签到数据
            signtime = time.strftime("%U:%u:%F %H:%M:%S")  #获取当前时间(一年中第几周的星期几，年月日，24小时制时间）
            SIGN_FILE_HANDLER.write('%s,%s,%s,%s\n' %(user,depar,num,signtime)) #写入文件
            SIGN_FILE_HANDLER.fileno()
            self.write('签到成功,时间：%s' %(signtime))
            gc.collect()
        except:
            t = time.strftime("%F %H:%M:%S")
            print("Error!\n    在签到页面出现异常 time:%s" %t)
        else:
            t = time.strftime("%F:%H:%M:%S")
            print("客户端访问签到页面一次，没有发生意外 time：%s" %t)

class WEB_TWOHTML_FILE(web.RequestHandler):
    def get(self, *args, **kwargs):
        try:
            # y = time.strftime("%F %H:%M:%S")
            # self.write('链接测试成功！time：%s' %y)
            self.render('webtwo.html')
            #self.write("Hello, world")  # 返回字符串
            #self.write("客户端请求测试")
            gc.collect()
            return '时光私有云'
        except:
            self.write("客户端请求的测试失败")
            errornum='客户端请求的测试失败'
            m = time.strftime("%F:%H:%M:%S")
            print("Error: %s  time:%s" % (errornum, m))
            return 'ERROR'
# 用户签到处理模块；
class SignPageHandlers(web.RequestHandler):
    #  当用户请求为get时，跳转页面到签到页面;
    def get(self, *args, **kwargs):
        self.render("sign.html")
    # 当用户请求为post时，对用户提交信息做验证,并存储签到信息到文件中;
    def post(self, *args, **kwargs):
        name = self.get_argument('name')
        department = self.get_argument('department')
        num = self.get_argument('num')
        if name and department and num:
            print(name, department, num)
            # 将用户签到信息写入文件中；
            SIGN_FILE_HANDLER.write('%s,%s,%s\n' %(name, department, num))
            # 手动刷新, 将缓冲区内容写入的文件;
            SIGN_FILE_HANDLER.flush()
            self.write('签到成功!')#这里可以改为返回一个通知页面self.render('文件名.html')
        else:
            self.write('请填写正确的签到信息!')



#网站路由
try:
    application = web.Application([
        (r"/signs",SignPageHandlers),
        (r"/sign", SignpageHandler),  # 签到页面
        (r"/webcs",WEB_TWOHTML_FILE),  #web测试页面
     ],
        tamplate_path='tamplates', #页面路径
        static_path='static', #静态资源文件路径
        autoescape=None, #关闭自动标尺
        # debug=True,  #开启调试
    )
except:
    print("Error!\n      路由出现错误")

#socket服务（前台）
if __name__ == '__main__':
    ##18年老项目了，没写静态文件分离和日志记录等功能
    host_name = socket.gethostname()  # 获取主机名
    ip_address = socket.gethostbyname(host_name)  # 获取主机名对应的IP地址
    url = ('http://' + ip_address + ':' + port)  #拼接出url
    urlindex = ('http://' + ip_address + ':' + port + '/index')  #拼接出首页url
    print("url: %s \n主页：：%s" % (url,urlindex))
    http_server = httpserver.HTTPServer(application)
    http_server.listen(port)     #监听端口
    ioloop.IOLoop.current().start()